def calculate_transposed_conv_output_size(H_in, stride, padding, kernel_size, output_padding, dilation):
    """
    计算转置卷积输出尺寸的函数。

    参数:
    - H_in: 输入尺寸（高度或宽度）
    - stride: 步长
    - padding: 填充
    - kernel_size: 卷积核尺寸
    - output_padding: 输出填充
    - dilation: 扩张因子

    返回:
    - H_out: 输出尺寸（高度或宽度）
    """
    H_out = (H_in - 1) * stride - 2 * padding + dilation * (kernel_size - 1) + output_padding + 1
    return H_out


def calculate_conv_output_size(i, p, k, s):
    """
    计算卷积层输出尺寸的函数。

    参数:
    - i: 输入尺寸（输入特征图的高度或宽度）
    - p: 填充（在输入特征图周围填充的零的层数）
    - k: 卷积核大小（卷积窗口的高度或宽度）
    - s: 步长（卷积核滑动的步长）

    返回:
    - o: 输出大小（输出特征图的高度或宽度）
    """
    o = (i + 2 * p - k) // s + 1
    return o


if __name__ == '__main__':
    # 测试函数
    H_in = 14
    stride = 16
    padding = 8
    kernel_size = 32
    output_padding = 0
    dilation = 1

    H_out = calculate_transposed_conv_output_size(H_in, stride, padding, kernel_size, output_padding, dilation)
    print("Calculated output size:", H_out)

    # 示例使用
    i = 2  # 输入尺寸
    p = 1  # 填充
    k = 3  # 卷积核大小
    s = 2  # 步长
    output_size = calculate_conv_output_size(i, p, k, s)
    print("Output size:", output_size)
